﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using System.Data.SqlClient;

namespace DAO
{
    public static class ProfesorDAO
    {
        public static int agregarProfesor(Profesor profesor,Usuario usu)
        {
            string cmd = "INSERT INTO Usuario (usu_nombre,usu_clave,usu_rol) VALUES (@nomUsu,@clave,@rol); ";
            cmd += "INSERT INTO Profesor (pro_nombre, pro_apellido, pro_usu_nombre) VALUES (@nombre,@apellido,@nomUsu);";
            List<SqlParameter> listaParam = new List<SqlParameter>();
            listaParam.Add(new SqlParameter("@nombre", profesor.Nombre));
            listaParam.Add(new SqlParameter("@apellido", profesor.Apellido));
            listaParam.Add(new SqlParameter("@nomUsu", usu.Nombre));
            listaParam.Add(new SqlParameter("@clave", usu.Clave));
            listaParam.Add(new SqlParameter("@rol", usu.Rol));
            int i = DB.EjecutarCommand(cmd, listaParam);
            return i;
        }

        public static List<Profesor> obtenerProfesores(string apellido)
        {
            string cmd = "SELECT pro.pro_id,pro.pro_nombre, pro.pro_apellido, pro.pro_usu_nombre FROM Profesor pro, Usuario usu ";
            cmd += "WHERE pro.pro_usu_nombre = usu.usu_nombre and pro_fecha_baja IS NULL";
            List<SqlParameter> listaParam = new List<SqlParameter>();
            if (!string.IsNullOrWhiteSpace(apellido))
            {
                cmd += " AND pro_apellido like '%' + @apellidoProf + '%'";
                listaParam.Add(new SqlParameter("@apellidoProf", apellido));
            }
            SqlDataReader dr = DB.GenerarReader(cmd, listaParam);
            List<Profesor> listaProfesores = new List<Profesor>();
            while (dr.Read())
            {
                Usuario usu = new Usuario();
                Profesor pro = new Profesor();
                pro.Usuario = usu;
                pro.Id = Int32.Parse(dr["pro_id"].ToString());
                pro.Nombre = dr["pro_nombre"].ToString();
                pro.Apellido = dr["pro_apellido"].ToString();
                pro.Usuario.Nombre = dr["pro_usu_nombre"].ToString();             

                listaProfesores.Add(pro);
            }
            dr.Close();

            return listaProfesores;
        }

        public static List<Profesor> obtenerProfesores()
        {
            string cmd = "SELECT pro.pro_id,pro.pro_nombre, pro.pro_apellido, pro.pro_usu_nombre FROM Profesor pro, Usuario usu ";
            cmd += "WHERE pro.pro_usu_nombre = usu.usu_nombre and pro_fecha_baja IS NULL";
            SqlDataReader dr = DB.GenerarReader(cmd);
            List<Profesor> listaProfesores = new List<Profesor>();
            while (dr.Read())
            {
                Usuario usu = new Usuario();
                Profesor pro = new Profesor();
                pro.Usuario = usu;
                pro.Id = Int32.Parse(dr["pro_id"].ToString());
                pro.Nombre = dr["pro_nombre"].ToString();
                pro.Apellido = dr["pro_apellido"].ToString();
                pro.Usuario.Nombre = dr["pro_usu_nombre"].ToString();

                listaProfesores.Add(pro);
            }
            dr.Close();

            return listaProfesores;
        }

        public static Profesor obtenerProfesorId(int id)
        {
            string cmd = "SELECT * FROM Profesor ";
            cmd += "WHERE pro_id = @id;";
            List<SqlParameter> listaParam = new List<SqlParameter>();
            listaParam.Add(new SqlParameter("@id", id));
            SqlDataReader dr = DB.GenerarReader(cmd, listaParam);
            Profesor pro = new Profesor();
            while (dr.Read())
            {
                Usuario usu = new Usuario();
                pro.Usuario = usu;
                pro.Id = Int32.Parse(dr["pro_id"].ToString());
                pro.Nombre = dr["pro_nombre"].ToString();
                pro.Apellido = dr["pro_apellido"].ToString();
                pro.Usuario.Nombre = dr["pro_usu_nombre"].ToString(); 
            }
            return pro;
        }

        public static void bajaProfesor(int idProfesor)
        {
            string cmd = "UPDATE Profesor SET pro_fecha_baja = GETDATE() ";
            cmd += "WHERE pro_id = @id ";
            List<SqlParameter> listaParam = new List<SqlParameter>();
            listaParam.Add(new SqlParameter("@id", idProfesor));
            DB.EjecutarCommand(cmd, listaParam);
        }

        public static void modificarProfesor(Profesor profesor)
        {
            string cmd = "UPDATE Profesor SET pro_nombre = @nombre, pro_apellido = @apellido ";
            cmd += "WHERE pro_id = @id;";
            List<SqlParameter> listaParam = new List<SqlParameter>();
            listaParam.Add(new SqlParameter("@id", profesor.Id));
            listaParam.Add(new SqlParameter("@nombre", profesor.Nombre));
            listaParam.Add(new SqlParameter("@apellido", profesor.Apellido));
            int i = DB.EjecutarCommand(cmd, listaParam);
        }



    }
}
